package bean.srv;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import xmlparsers.SystemParser;
import xmlparsers.XMLBuilder;

import dominio.*;
import bean.dao.HibernateCotizacionDAO;

public class CotizacionSRV {
	private static HibernateCotizacionDAO dao= HibernateCotizacionDAO.getInstancia();
	
	public Cotizacion getCotizacion(int numeroCotizacion){
		return dao.getCotizacion(numeroCotizacion);
	}
	
	public Cotizacion getCotizacionPorId (int id){
		return dao.getCotizacionPorId(id);
	}
	
	public Cotizacion newCotizacion(Date fecha, String vigenciaDesde, String vigenciaHasta,
			String termino, String estado, FormaPago formaPago){
		Cotizacion cotizacion = new Cotizacion();
		cotizacion.setFecha(fecha);
		try {
			cotizacion.setVigenciaDesde(new SimpleDateFormat("ddMMyyyy").parse(vigenciaDesde));
			cotizacion.setVigenciaHasta(new SimpleDateFormat("ddMMyyyy").parse(vigenciaHasta));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		cotizacion.setEstado(estado);
		cotizacion.setTermino(termino);
		cotizacion.setFormaPago(formaPago);
		dao.persistCotizacion(cotizacion);
		return cotizacion;
	}
	
	// usaron el numero de cotizacion como  id
	public Cotizacion crearXMLPorId (int id ,String path) {
		Cotizacion coti = this.getCotizacionPorId (id); 
		XMLBuilder.getInstance().createCotizaionXML(coti, path);
		return coti;
	}

	public Cotizacion crearXMLPorNro (int num ,String path) {
		Cotizacion coti = this.getCotizacion(num); 
		XMLBuilder.getInstance().createCotizaionXML(coti, path);
		return coti;
	}
	
	public Cotizacion persitirXMLFile (String filepath) {
		Cotizacion coti = SystemParser.getInstance().parseCotizacion(filepath);
		dao.persistCotizacion(coti);
		return coti;
	}
	
	public void asignarSolicitudCotizacion(Cotizacion cotizacion, SolicitudCotizacion solicitudCotizacion){
		cotizacion.setSolicitudCotizacion(solicitudCotizacion);
		dao.updateCotizacion(cotizacion);
	}
	
	public SolicitudCotizacion getSolicitudCotizacion(int numeroSolicitud){
		return dao.getSolicitudCotizacion(numeroSolicitud);
	}
	
	public void cambiarEstado(Cotizacion cotizacion, String nuevoEstado){
		cotizacion.setEstado(nuevoEstado);
		dao.updateCotizacion(cotizacion);
	}
	
	public void agregarSolicitudCotizacion(List<SolicitudCotizacion> solicitud){
		dao.agregarSolicitudCotizacion(solicitud);
	}
	
	public void agregarSolicitud(SolicitudCotizacion s){
		dao.agregarSolicitud(s);
	}

	public int crearCotizacion(Cotizacion c) 
	{
		List<ItemSolicitud> itemsSolicitud =  c.getSolicitudCotizacion().getItems();
	
		System.out.println("Items en la solicitud a cotizar: " + itemsSolicitud.size());
		
		int numero =  dao.crearCotizacion(c);
		
		for(int i = 0;i<itemsSolicitud.size();i++)
		{
			Rodamiento r = itemsSolicitud.get(i).getRodamiento();
			
			ItemListaPrecios itemLista = buscarMejorItem(r);
			
			System.out.println("El mejor items que coincide con el criterio de busqueda es: " + itemLista.getIdItemLista());
			
			if(itemLista != null)
			{				
				dao.agregarItemListaACotizacion(itemsSolicitud.get(i).getItemSolicitudId(), itemLista.getIdItemLista());				
			}
		}
		
		return numero;
	}
	
	private ItemListaPrecios buscarMejorItem(Rodamiento r)
	{
		return dao.buscarMejorItem(r);
	}

	public Cotizacion obtenerCotizacion(int numeroCotizacion) {

		return dao.obtenerCotizacion(numeroCotizacion);
	}

	public List<Cotizacion> obtenerCotizaciones() {

		return dao.obtenerCotizaciones();
	}
}
